package com.hsh.graph
{
	import flash.display.Graphics;
	import flash.display.GraphicsPath;
	import flash.geom.Matrix;
	
	/**
	 * Commandes graphiques servant à dessiner un visuel 
	 * @author Jean-Marie@home
	 */
	public class Forme
	{
		private var v:Visuel;
		private var gr:Graphics;
		
		public function Forme(visuel:Visuel)
		{
			v = visuel;
			gr = v.canevas;
		}
		
		/**
		 * annule le graphics et le Visuel
		 */
		public function detruire():void
		{
			gr = null;
			v = null;
		}
		
		/**
		 * Dessine ou redessine sur le canevas
		 */
		public function actualiser():void
		{
			gr.clear();
			var cf:int 
			switch (v.etat)
			{
				case Etat.SURVOL: 
				case Etat.MOLETTE: 
					
					cf = v.coulSurvol
					break;
				
				case Etat.MOUVEMENT: 
				case Etat.ENFONCEMENT: 
				case Etat.DIMENSION:
				case Etat.PRESSION:
					
					cf = v.coulEnfonce;
					break;
					
				case Etat.CLIC: 
				case Etat.CLIC_DROIT:
				case Etat.RELACHEMENT:
					
					cf = v.coulRelache;
					break;
					
				default: // normal :
					
					cf = v.coulFond;
			}
			
			if (v.coulBord > -1)
			{
				gr.lineStyle(v.epaisseur, v.coulBord, v.alphaBord);
			}
			else
			{
				gr.lineStyle();
			}
			if (cf > -1)
			{
				if (v.coulDegr > -1)
				{
					var m:Matrix = new Matrix();
					m.createGradientBox(v.largeur, v.hauteur, Math.PI / 180 * v.angleDegr);
					gr.beginGradientFill("linear", [v.coulDegr, cf], [v.alphaDegrade, v.alphaFond], [0, 255], m);
				}
				else
				{
					gr.beginFill(cf, v.alphaFond);
				}
			}
			gr.drawRoundRect(0, 0, v.largeur, v.hauteur, v.arrondi);
			gr.endFill();
		}
	}
}